package shark.picture.controller;

/**
 * @author jianxin.wei
 * @description
 * @date 2025/8/13 22:15
 */
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class TestPDF {
    public static void main(String[] args) throws Exception {
        // 1. 创建文档
        PDDocument doc = PDDocument.load(new File("E:/shark/需求文档/2025-04-29 直通车/文件汇总/业扩直通车-四类单据模板/PDF/业务费缴费通知单.pdf"));
        String out = "E:/shark/需求文档/2025-04-29 直通车/文件汇总/业扩直通车-四类单据模板/PDF/业务费缴费通知单1.pdf";
        PDPage page = doc.getPage(0);

        // 2. 加载中文字体（务必使用绝对路径）
        PDType0Font font = loadFontFromResources(doc, "Font/ybst.ttf"); // 替换为你的字体路径

        // 3. 在指定位置写入中文
        try (PDPageContentStream stream = new PDPageContentStream(doc,
                page,
                PDPageContentStream.AppendMode.APPEND, // 追加模式
                true,  // 压缩
                true)) {

            // 参数说明：x（水平）, y（垂直，从页面底部算起）, 内容
            placeChineseText(stream, font, 422, 355, 9, "2025");
            placeChineseText(stream, font, 452, 355, 9, "08");
            placeChineseText(stream, font, 475, 355, 9, "14");
//            placeChineseText(stream, font, 372, 508, 10, "字号10");
//            placeChineseText(stream, font, 372, 483, 10, "字号10");
//            placeChineseText(stream, font, 372, 458, 10, "字号10");
//            placeChineseText(stream, font, 340, 330, 10, "字号10");
//            placeChineseText(stream, font, 375, 175, 10, "字号10");
//            placeChineseText(stream, font, 140, 500, 10, "字号10");
//            placeChineseText(stream, font, 140, 500, 10, "字号10");
//            placeChineseText(stream, font, 140, 500, 10, "字号10");
        }

        doc.save(out);
        // 4. 保存
        doc.close();
    }

    private static PDType0Font loadFontFromResources(PDDocument doc, String resourcePath) throws IOException {
        try (InputStream fontStream = TestPDF.class.getClassLoader().getResourceAsStream(resourcePath)) {
            if (fontStream == null) {
                throw new IOException("字体文件未找到: " + resourcePath);
            }
            return PDType0Font.load(doc, fontStream);
        }
    }

    /**
     * 在PDF指定位置放置中文文本
     * @param stream 内容流
     * @param font 中文字体
     * @param x 水平位置（左边缘为0）
     * @param y 垂直位置（下边缘为0）
     * @param fontSize 字号
     * @param text 中文内容
     */
    private static void placeChineseText(PDPageContentStream stream,
                                         PDType0Font font,
                                         float x, float y,
                                         float fontSize,
                                         String text) throws IOException {
        stream.beginText();
        stream.setFont(font, fontSize);
        stream.newLineAtOffset(x, y); // 关键：设置绝对坐标
        stream.showText(text);
        stream.endText();
    }
}
